/*
 * UniMediaWriter.cpp
 *
 *  Created on: 2020年7月18日
 *      Author: terry
 */

#include "UniMediaWriter.h"
#include "UMediaFileFormat.h"
#include "UMuxerWriter.h"
#include "CUMediaWriter.h"
#include "UMediaMuxer.h"

#include "PsMediaMuxer.h"
#include "TsMediaMuxer.h"
#include "FlvMediaMuxer.h"

//#include "UmfMediaMuxer.h"
#include "UMediaFileFormatUtil.h"


void UniMediaWriter::startup()
{
}

void UniMediaWriter::cleanup()
{
}


static UMediaMuxer* createMuxer(int fileFormat)
{
    if (fileFormat == UMEDIA_FILE_TS)
    {
        return new TsMediaMuxer();
    }
    else if (fileFormat == UMEDIA_FILE_PS)
    {
        return new PsMediaMuxer();
    }
    else if (fileFormat == UMEDIA_FILE_FLV)
    {
        return new FlvMediaMuxer();
    }
//    else if (fileFormat == UMEDIA_FILE_UMF)
//    {
//        return new UmfMediaMuxer();
//    }

    return nullptr;
}



UMediaWriter* UniMediaWriter::create(int fileFormat)
{
	if (fileFormat == UMEDIA_FILE_UMF)
	{
	    UMediaMuxerPtr muxer(createMuxer(fileFormat));
		return new UMuxerWriter(fileFormat, muxer);
	}
	else if (fileFormat == UMEDIA_FILE_PS)
	{
		UMediaMuxerPtr muxer(createMuxer(fileFormat));
		return new UMuxerWriter(fileFormat, muxer);
	}
	//else if (fileFormat == UMEDIA_FILE_TS)
	//{
 //       UMediaMuxerPtr muxer(createMuxer(fileFormat));
 //       return new UMuxerWriter(fileFormat, muxer);
	//}

	//else if (fileFormat == UMEDIA_FILE_FLV)
	//{
 //       UMediaMuxerPtr muxer(createMuxer(fileFormat));
 //       return new UMuxerWriter(fileFormat, muxer);
	//}
	return new CUMediaWriter(fileFormat);
}

void UniMediaWriter::destroy(UMediaWriter* writer)
{
	if (writer)
	{
		writer->close();
		delete writer;
	}
}

UMediaWriter* UniMediaWriter::create(const char* filename)
{
	int fileFormat = parseFileFormat(filename);
	return create(fileFormat);
}

const char* UniMediaWriter::getFileExt(int fileFormat)
{
	return UMediaFileFormatUtil::getFileExt(fileFormat);
}

int UniMediaWriter::parseFileFormat(const char* filename)
{
	return UMediaFileFormatUtil::parseFileFormat(filename);
}

int UniMediaWriter::getFileFormat(const char* ext)
{
	return UMediaFileFormatUtil::getFileFormat(ext);
}

